package math;

/**
 * 给你一个整数 num 。你可以对它进行以下步骤共计 两次：
 * <p>
 * 选择一个数字 x (0 <= x <= 9).
 * 选择另一个数字 y (0 <= y <= 9) 。数字 y 可以等于 x 。
 * 将 num 中所有出现 x 的数位都用 y 替换。
 * 令两次对 num 的操作得到的结果分别为 a 和 b 。
 * <p>
 * 请你返回 a 和 b 的 最大差值 。
 * <p>
 * 注意，新的整数（a 或 b）必须不能 含有前导 0，并且 非 0。
 * <p>
 * 示例 1：
 * 输入：num = 555
 * 输出：888
 * 解释：第一次选择 x = 5 且 y = 9 ，并把得到的新数字保存在 a 中。
 * 第二次选择 x = 5 且 y = 1 ，并把得到的新数字保存在 b 中。
 * 现在，我们有 a = 999 和 b = 111 ，最大差值为 888
 * <p>
 * 示例 2：
 * 输入：num = 9
 * 输出：8
 * 解释：第一次选择 x = 9 且 y = 9 ，并把得到的新数字保存在 a 中。
 * 第二次选择 x = 9 且 y = 1 ，并把得到的新数字保存在 b 中。
 * 现在，我们有 a = 9 和 b = 1 ，最大差值为 8
 * <p>
 * 示例 3：
 * 输入：num = 123456
 * 输出：820000
 * <p>
 * 示例 4：
 * 输入：num = 10000
 * 输出：80000
 * <p>
 * 示例 5：
 * 输入：num = 9288
 * 输出：8700
 *
 * @author Jisheng Huang
 * @version 20250615
 */
public class MaxDifference_1432 {
    public static int maxDiff(int num) {
        String s = String.valueOf(num);
        char[] cs = s.toCharArray();

        int mx = num;

        for (char d : cs) {
            if (d != '9') {
                mx = replace(s, d, '9');
                break;
            }
        }

        int mn = num;

        if (cs[0] != '1') {
            mn = replace(s, cs[0], '1');
        } else {
            for (int i = 1; i < cs.length; ++i) {
                if (cs[i] > '1') {
                    mn = replace(s, cs[i], '0');
                    break;
                }
            }
        }

        return mx - mn;
    }

    private static int replace(String s, char oldChar, char newChar) {
        String t = s.replace(oldChar, newChar);

        return Integer.parseInt(t);
    }

    public static void main(String[] args) {
        System.out.println(maxDiff(555));
        System.out.println(maxDiff(9));
        System.out.println(maxDiff(123456));
        System.out.println(maxDiff(10000));
        System.out.println(maxDiff(9288));
    }
}
